Many computer systems and software suffer from bugs, i.e., errors in programming, that result in security vulnerabilities. Attackers attempt to discover and exploit these vulnerabilities in order to elevate their privileges and perform unauthorized actions in the computer system. Such exploitation may include, for example, installing and running malicious programs, copying and/or deleting files, manipulating software functions, and possibly rendering the system completely non-operational. Vulnerabilities that may be exploited for such purposes include, but are not limited to, stack and heap buffer overflows, as well as other kinds of memory corruptions.